package com.example.jwttoken.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.example.jwttoken.pojo.User;

import java.util.Date;
import java.util.HashMap;

public class JwtHelper {
    /**
     * 解析jwt
     */
//    public static String parseJWT(User user, String base64Security){

//        try
//        {
//            Claims claims = Jwts.parser()
//                    .setSigningKey(DatatypeConverter.parseBase64Binary(base64Security))
//                    .parseClaimsJws(jsonWebToken).getBody();
//            return claims;
//        }
//        catch(Exception ex)
//        {
//            return null;
//        }
//    }

    /**
     * 构建jwt
     */
//    public static String createJWT(String name, String userId, String role,
//                                   String audience, String issuer, long TTLMillis, String base64Security)
//    {
//        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//
//        long nowMillis = System.currentTimeMillis();
//        Date now = new Date(nowMillis);
//
//        //生成签名密钥
//        byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(base64Security);
//        Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
//
//        //添加构成JWT的参数
//        JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")
//                .claim("role", role)
//                .claim("unique_name", name)
//                .claim("userid", userId)
//                .setIssuer(issuer)
//                .setAudience(audience)
//                .signWith(signatureAlgorithm, signingKey);
//        //添加Token过期时间
//        if (TTLMillis >= 0) {
//            long expMillis = nowMillis + TTLMillis;
//            Date exp = new Date(expMillis);
//            builder.setExpiration(exp).setNotBefore(now);
//        }
//
//        //生成JWT
//        return builder.compact();
//    }
    public static String createJWT(User user) {

        HashMap<String, Object> heardMap = new HashMap<>();
        heardMap.put("alg", "HS256");
        heardMap.put("typ", "JWT");
        JWT.create().withHeader(heardMap);
        String admin = JWT.create()
                .withAudience(user.getUsername(),user.getPassword())//自定义信息
                .withClaim("name",user.getUsername())
//                .withAudience()//接收jwt的一方
//                .withExpiresAt(new Date(System.currentTimeMillis() + 10000))//过期时间戳(jwt的过期时间，这个过期时间必须要大于签发时间)
//                .withNotBefore(new Date(System.currentTimeMillis() + 200))//定义在什么时间之前，该jwt都是不可用的
                .withIssuedAt(new Date())// jwt的签发时间
                .withJWTId(Audience.KEY)//jwt的唯一身份标识，主要用来作为一次性token,从而回避重放攻击。
                .sign(Algorithm.HMAC256(Audience.KEY));//签名
        return  admin;
    }
}